<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="../rurple.css" type="text/css" />

<title>Reeborg entscheidet mal so, mal so.</title>
</head>
<body>
<h2 class="title">14.Reeborg entscheidet mal so, mal so.</h2>

<p>Bei der Hürden-Übung der letzten Lektion <small>(du hast sie doch
ausprobiert, oder?)</small> sollte ein <span class="pykeyword">if</span>/
<span class="pykeyword">else</span> in ein anderes <span class="pykeyword">
if</span>/<span class="pykeyword">else</span> hineingeschrieben werden, damit
Reeborg die Wahl zwischen drei Aktionen hatte: aufhören, gehen, springen.
Vielleicht ist dir aufgefallen, dass wir deshalb den Quelltext immer weiter
einrücken
mussten. Stell dir vor, was passieren würde, wenn Reeborg eine Aktion aus 10
möglichen wählen müsste. Der Quelltext, den wir dafür schreiben müssten, wäre sehr
unübersichtlich. Für solche Fälle hat der Python-Erfinder Guido van Rossum das
Schlüsselwort <span class="pykeyword">elif</span> geschaffen, das an Stelle
eines <span class="pykeyword">else</span> gefolgt von einem <span class=
"pykeyword">if</span> eingesetzt werden kann, also eine Abkürzung für <span
class="pykeyword">else: ... if</span>. Mit dem neuen Schlüsselwort sieht der Quelltext
aus der letzten Lektion so aus:</p>

<pre>
<span class="keyword">def</span> move_jump_or_finish():
    <span class="keyword">if</span> on_beeper():
        turn_off()
    <span class="keyword">elif</span> front_is_clear():
        move()
    <span class="keyword">else</span>:
        jump_one_hurdle()
</pre>

<p>Wir können jetzt besser erkennen, dass es drei Wahlmöglichkeiten gibt, da
sie alle auf gleiche Weise eingerückt sind. Die <span class="pykeyword">
else</span>-Bedingung wird nur ausgeführt, wenn alle zuvor berechneten
Bedingungen False (falsch) sind, daher steht hier keine weitere Bedingung. Wenn
wir mehr als drei Wahlmöglichkeiten haben, brauchen wir nur weitere <span
class="pykeyword">elif</span>-Anweisungen einzufügen.</p>

<pre>
<span class="keyword">def</span> move_jump_or_finish():
    <span class="keyword">if</span> on_beeper():
        turn_off()
    <span class="keyword">elif</span> front_is_clear():
        move()
    <span class="keyword">elif</span> right_is_clear(): <span class=
"comment"># always false</span>
        <span class="keyword">pass</span> 
    <span class="keyword">else</span>:
        jump_one_hurdle()
</pre>

<p>Wenn Reeborg an der unteren Mauer entlang geht, ist <tt>right_is_clear()</tt>
immer falsch, so dass die <span class="pykeyword">pass</span>-Anweisung (eine
Anweisung, die nichts tut) nie ausgeführt wird. Wenn wir stattdessen 
<tt>left_is_clear()</tt> verwendet hätten, wäre Reeborg für immer stecken
geblieben, sobald er die erste Hürde erreicht hätte. <b>Probiere es aus!</b></p>

<h3 class="try">Du bist dran.</h3>

<p>Versuche, ein Programm zu schreiben, das die Anweisungen <span class=
"pykeyword">if, elif, else</span> verwendet und mit den vorigen beiden Hürden
sowie mit der in der Datei hurdles3.wld funktioniert:</p>

<img alt="hurdles start" src="../../images/intro/hurdles3_start.png" />

<div class="lessons_nav">
<a href="13-else.htm"><img alt="previous" src=
"../../images/previous.png" />Reeborg entscheidet anders.</a> - <a href=
"../lessons_toc.htm"><img alt="home" src="../../images/home.png" /></a> - <a href=
"15-not.htm">Negativ, Reeborg!<img alt="next" src=
"../../images/next.png" /></a>
</div>
</body>
</html>
